package org.linlinjava.litemall.wx.util;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.linlinjava.litemall.core.util.ResponseUtil;

/**
 * @author wf_sxf@163.com
 * @date 2018/5/22 8:28
 */
public class SendMsgUtil {
    private final Log log = LogFactory.getLog(SendMsgUtil.class);
    /**
     * 通过阿里大于接口进行发送短信
     * @param content
     * @return
     * @throws Exception
     */
    public static Object sendSmsByAliDayu(String content) throws Exception {
        String appkey = "LTAIU8HSJVuVAfkL";
        String secret = "rQoNm7O7Okpyj1RupfgcPbhx8HQTC2";
        String phones = "15954213627";
        //产品名称:云通信短信API产品,开发者无需替换
        String product = "Dysmsapi";
        //产品域名,开发者无需替换
        String domain = "dysmsapi.aliyuncs.com";
        try {

            //可自助调整超时时间
            System.setProperty("sun.net.client.defaultConnectTimeout", "1000");
            System.setProperty("sun.net.client.defaultReadTimeout", "1000");
            //初始化acsClient,暂不支持region化
            IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", appkey, secret);
            DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
            IAcsClient acsClient = new DefaultAcsClient(profile);
            //组装请求对象-具体描述见控制台-文档部分内容
            SendSmsRequest request = new SendSmsRequest();
            //必填:待发送手机号
            request.setPhoneNumbers(phones);
            //必填:短信签名-可在短信控制台中找到
            request.setSignName("蜂鸟智能");
            //必填:短信模板-可在短信控制台中找到
            request.setTemplateCode("SMS_135034254");
            //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
            request.setTemplateParam(content);

            //hint 此处可能会抛出异常，注意catch
            SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
            String code = sendSmsResponse.getCode();
            String message = sendSmsResponse.getMessage();
            Boolean success = true;
            if (!"OK".equals(code)){
                System.out.println(message);
                ResponseUtil.fail(500,"发送短信失败，"+message);
            }
            return  ResponseUtil.ok(message);

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
           return  ResponseUtil.fail(500,"发送短信失败，"+e.getMessage());
        }
    }

    public static void main(String[] args) {
        String content = "{\"consignee\":\"史新峰\",\"number\":\"18369656586\",\"price\":\"1259.00\"}";
        try {
            Object result  = sendSmsByAliDayu(content);
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
